How
the DLL Interfaces with a Performance Monitor Application
An
application retrieves performance data by specifying HKEY_PERFORMANCE_DATA
in a call to the RegQueryValueEx function. If successful, RegQueryValueEx fills a
buffer of the application with the requested performance data.
The first
time an application calls RegQueryValueEx, or if the application uses
the RegOpenKey
function to open HKEY_PERFORMANCE_DATA, the system calls the Open
function for each application with the correct registry entries. This gives
each performance DLL an opportunity to initialize its performance data
structures. Then, if the Open function returns successfully (or if there is no
Open function), the system calls the Collect function. Subsequent calls to RegQueryValueEx
cause the system to call the Collect function.
When the
application has finished collecting performance data, it specifies HKEY_PERFORMANCE_DATA
in a call to the RegCloseKey
function. This causes the system to call the Close function for each application.
The performance DLLs are then unloaded.
Note It is possible
for multiple programs to collect performance data at the same time. The system
calls Open and Close functions only once for each application requesting
performance data. For remote measurement, the system limits access to these
routines to one thread at a time, so synchronization is not a problem. However,
for local measurement, because multiple processes may be making simultaneous
calls, you must prevent any conflicts from multiple concurrent requests for
data.